import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
data=pd.read_csv('data-simple.csv',sep=',', names=['user_id','item_id','rating'], header=0)
print('数据示例 ====== ')
print(data.head())


# 查看user_id与item_id是否有重复的情况
# 去掉重复的数据
print('重复数量', data.duplicated(subset=['user_id','item_id']).sum())
data = data.drop_duplicates(subset=['user_id','item_id'])

data.to_csv('data-simple.csv', index=False)

# 查看数据信息
# 数据规模 10000 * 4
# print('数据信息 ====== ')
# print(data.info())

# 数据描述
print('数据描述 ====== ')
print(data.describe())

# 统计用户物品个数
print('用户个数', data.user_id.nunique()) # 返回不重复user_id的个数，统计用户的个数
print('物品个数', data.item_id.nunique()) # 统计物品的个数

# 查看user_id与item_id是否有重复的情况
print('重复评分记录', data.duplicated(subset=['user_id','item_id']).sum())

# 数据检查

# 统计每个物品对应的用户数
item_id_usercnt = data.groupby('item_id').count().user_id
print('统计每个物品对应的用户数', item_id_usercnt[:5])

# 展示分类聚合结果
# plt.ylabel('用户数')
# plt.hist(item_id_usercnt.values)
# plt.show()

# 显示十分位数
print('每个物品对应用户的十分位数', item_id_usercnt.quantile(q=np.arange(0,1.1,0.1)))


# 统计每个用户对应的物品数
user_id_itemcnt = data.groupby('user_id').count().item_id
print('统计每个用户对应的物品数', user_id_itemcnt[:5])

# 展示分类聚合结果
plt.ylabel('物品数')
plt.hist(user_id_itemcnt.values)
plt.show()

# 显示十分位数
print('每个用户对应物品的十分位数', user_id_itemcnt.quantile(q=np.arange(0,1.1,0.1)))

